2

几道 BAT 算法面试中经常问的「字符串」问题

1. js为数字添加千位分隔符

(12345678.999).toLocaleString("en-US")  =》 "12,345,678.999"

(12345678.999).toLocaleString() =》 "12,345,678.999"

"12345678.32423432".replace(/(\d{1,2})(?=(\d{3})+\.)/g, '$1,') =》 "12,345,678.32423432"
function fmoney(s, n) {
 n = n > 0 && n <= 20 ? n : 2;
 s = parseFloat((s + '').replace(/[^\d\.-]/g, '')).toFixed(n) + '';
 var l = s.split('.') [0].split('').reverse(),
   r = s.split('.') [1];
 var t = '';
 for (var i = 0; i < l.length; i++)
 {
   t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? ',' : '');
 }
 return t.split('').reverse().join('') + '.' + r; 
 }

参考链接:https://www.jianshu.com/p/928...

2. JS保留两位小数

158213.toFixed(2)  =》 "2.16"

参考链接:https://www.cnblogs.com/le220...

3. 数组去重
参考链接:

https://juejin.im/post/5c7e0328f265da2dc538da03
https://github.com/mqyqingfeng/Blog/issues/27

4.0<100<(0+4) -> (0<100)<4 -> true<4 -> 1<4 -> true

5. 数组交集并集差集
现有两数组a = [1, 2, 3],b = [2, 4, 5],求a,b数组的并集,交集和差集。

先介绍下交集并集,差集的基本概念

集合的分类: 
并集:以属于A或属于B的元素为元素的集合成为A与B的并(集) 记作A∪B(或B∪A),读作“A并B”(或“B并A”),即A∪B={x|x∈A,或x∈B}
交集:以属于A且属于B的元素为元素的集合成为A与B的交(集) 记作A∩B(或B∩A),读作“A交B”(或“B交A”),即A∩B={x|x∈A,且x∈B}
差集:以属于A而不属于B的元素为元素的集合成为A与B的差(集)记作A-B(或B∩A),读作“A减B”,即A-B={x∣x∈A,且x∉B}


// 并集
let union = a.concat(b.filter(v => !a.includes(v))) // [1,2,3,4,5]
// 交集
let intersection = a.filter(v => b.includes(v)) // [2]
// 差集
let difference = a.concat(b).filter(v => a.includes(v) && !b.includes(v)) // [1,3]

zhouzhou
1.5k 声望76 粉丝

web前端